package moduloRemoto.bo;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import moduloRemoto.bo.interfaces.TarefaRemote;
import moduloRemoto.dao.interfaces.ServerLocal;
import moduloRemoto.pojo.Atividade;
import moduloRemoto.pojo.Colaborador;
import moduloRemoto.pojo.Tarefa;

import org.jboss.annotation.ejb.RemoteBinding;

@Stateless
@Remote(TarefaRemote.class)
@RemoteBinding(jndiBinding="ejb/tarefa")
public class TarefaBO implements TarefaRemote
{
	@EJB 
	private ServerLocal dao;


	@Override
	public Tarefa persistir(Tarefa objTar)
	{
		if (objTar == null)
			return null;

		try
		{
			if (objTar.getIdTar() > 0)
				objTar = dao.update(objTar);
			else
				objTar = dao.insert(objTar);
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return null;
		}

		return objTar;
	}

	@Override
	public Boolean excluir(int idTar)
	{
		if (idTar <= 0)
			return false;
		
		try
		{
			Tarefa objTar = this.carregarObjeto(idTar);

			if (objTar != null)
				dao.remove(objTar);
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return false;
		}
		
		return true;
	}
	
	@Override
	public Tarefa carregarObjeto(int idTar)
	{
		if (idTar <= 0)
			return null;
		
		Tarefa objTar = null;
		
		try
		{
			objTar = dao.find(Tarefa.class, idTar);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		return objTar;
	}

	@Override
	public List<Tarefa> getTarefasByColaborador(int idCol)
	{
		List<Tarefa> listaTarefas = new ArrayList<Tarefa>();
		
		try
		{
			for (Object objeto : dao.executeQuery("SELECT a FROM Atividade a WHERE a.primaryKey.colaboradorAti = " + idCol))
				listaTarefas.add(((Atividade)objeto).getTarefa());
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		return listaTarefas;
	}

	@Override
	public List<Tarefa> getTarefasByProjeto(int idPro)
	{
		List<Tarefa> listaTarefas = new ArrayList<Tarefa>();
		
		try
		{
			for (Object objeto : dao.executeQuery("SELECT t FROM Tarefa t WHERE t.projetoTar = " + idPro))
				listaTarefas.add((Tarefa)objeto);
			
			/** Recupera a lista de colaboradores */
			for(Tarefa tar : listaTarefas)
			{
				for(int i = 0; i < tar.getListaAtividades().size(); i++)
				{
					Atividade ati = tar.getListaAtividades().get(i);
					Colaborador colaborador = dao.find(Colaborador.class, ati.getPrimaryKey().getIdCol());
					tar.getListaAtividades().get(i).setColaborador(colaborador);
				}
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		return listaTarefas;
	}
}